package DataStorage;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;

import HibernateSQLite.java.model.Repertoire;

public class RepertoireDAOHibernate extends
		GenericDAOHibernate<Repertoire, Long, IRepertoireDAO> implements
		IRepertoireDAO {

	@SuppressWarnings("unchecked")
	public boolean isExist(long Repertoire_id) {
		try {
			List<Repertoire> list = getSession()
					.createCriteria(Repertoire.class)
					.add(Restrictions.eq("Repertoire_id", Repertoire_id))
					.list();
			if (!list.isEmpty()) {
				return true;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return false;
	}

	@SuppressWarnings("unchecked")
	public boolean isExistInformationLigne_id(long InformationLigne_id) {
		try {
			List<Repertoire> list = getSession()
					.createCriteria(Repertoire.class)
					.add(Restrictions.eq("InformationLigne_id",
							InformationLigne_id)).list();
			if (!list.isEmpty()) {
				return true;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return false;
	}

	public boolean isExist(Repertoire repertoire) {
		try {
			if (!repertoire.equals(null)) {
				long InformationLigne_id = repertoire.getInformationLigne_id();
				List<Repertoire> list = getListRepertoire(InformationLigne_id);
				if (list.contains(repertoire)) {
					return true;
				} else {
					return false;
				}
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return false;
	}

	@SuppressWarnings("unchecked")
	public boolean isExist(String critere_path, String donnees_ligne_path,
			String photos_groupees_path, String file_Qdas_path,
			long InformationLigne_id) {
		try {
			List<Repertoire> list = getSession()
					.createCriteria(Repertoire.class)
					.add(Restrictions.eq("critere_path", critere_path))
					.add(Restrictions.eq("donnees_ligne_path",
							donnees_ligne_path))
					.add(Restrictions.eq("photos_groupees_path",
							photos_groupees_path))
					.add(Restrictions.eq("file_Qdas_path", file_Qdas_path))
					.add(Restrictions.eq("InformationLigne_id",
							InformationLigne_id)).list();
			if (!list.isEmpty()) {
				return true;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return false;
	}

	public Repertoire getRepertoire(long InformationLigne_id) {
		List<Repertoire> list = this.getListRepertoire(InformationLigne_id);
		Repertoire repertoire = null;
		if (list.isEmpty()) {
			System.out.println("Does not exist in this element!");
		} else {
			for (Repertoire r : list) {
				repertoire = r;
			}
		}

		return repertoire;
	}

	@SuppressWarnings("unchecked")
	public List<Repertoire> getListRepertoire(long InformationLigne_id) {
		try {
			List<Repertoire> list = getSession()
					.createCriteria(Repertoire.class)
					.add(Restrictions.eq("InformationLigne_id",
							InformationLigne_id)).list();

			return list;
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	public void saveRepertoire(String critere_path, String donnees_ligne_path,
			String photos_groupees_path, String file_Qdas_path,
			long InformationLigne_id) {
		
		try {
			Repertoire repertoire;
			if (!this.isExist(critere_path, donnees_ligne_path,
					photos_groupees_path, file_Qdas_path, InformationLigne_id)) {

				repertoire = new Repertoire();
				repertoire.setCritere_path(critere_path);
				repertoire.setDonnees_ligne_path(donnees_ligne_path);
				repertoire.setPhotos_groupees_path(photos_groupees_path);
				repertoire.setFile_Qdas_path(file_Qdas_path);
				repertoire.setInformationLigne_id(InformationLigne_id);

				getSession().save(repertoire);
			} else {
				System.out.println("This element has been the existence ! ");
			}

			this.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}

	}

	public void deleteRepertoires(long InformationLigne_id) {
		if (this.isExistInformationLigne_id(InformationLigne_id)) {
			List<Repertoire> listRepertoire = getListRepertoire(InformationLigne_id);
			this.deleAll(listRepertoire);
		}
	}

	public static void main(String[] args) {
		RepertoireDAOHibernate repertoireDAO = new RepertoireDAOHibernate();

		long InformationLigne_id = 10;
		Repertoire repertoire = repertoireDAO
				.getRepertoire(InformationLigne_id);
		repertoire.setPhotos_groupees_path("ppppppuuuuuuu");
		repertoire.setCritere_path(")))))))))");
		repertoire.setDonnees_ligne_path("*********");
		repertoireDAO.saveOrUpdate(repertoire);

		long Repertoire_id = 100;
		if (!repertoireDAO.isExist(Repertoire_id)) {
			Repertoire repertoire2 = new Repertoire();
			repertoire2.setCritere_path("chad");
			repertoireDAO.saveOrUpdate(repertoire2);
		}
	}
}
